# -*- coding: utf-8 -*-
# File : app.py.py
# Author: taoyahui
# Date : 2022/5/11
from flask import Flask, request
app = Flask(__name__) # 创建一个Flask对象


@app.route("/")  # 设置访问路径“/”为根路径（只支持GET请求）
def index():  # 定义HTTP首页
    return "Hello world"  # 返回信息

#有两种方式定义路由：
# 第一种：通过装饰器定义
@app.route("/helloworld")
def helloworld():
    return "This is a Hello world function too"

# 第二种：通过app.add_url_rule定义
def my_url():
    a = 1
    b = 1
    return str(a+b)


# 定义路由参数
# 练习1：通过url传递字符串参数
@app.route("/<username>", methods=['GET'])
def username_get(username):
    print(type(username))   # username 是字符串形式
    return f"<h1>{username}</h1>"

# 练习2：传递多个参数
@app.route('/blockchain/<name>-<id>-<gender>',methods=["GET"])
def user_get(name, id, gender):
    return f'<h1>获取了一个学生信息,具体内容为: 姓名-> {name}, 编号-> {id}, 性别 -> {gender}</h1>'


# 注意，在定义参数传递的时候，一定要注意传递参数的类型
# 如果传递的参数是float浮点型，那么就一定要在传入参数的时候写为浮点型xxxx.xx(100.0)
@app.route('/my_salary/<int:age>/<float:salary>/', methods=["GET"])
def get_age_and_salary(age, salary):
    return f"<h1>年龄：{age}, 薪资: {salary}</h1>"  # 返回信息

# 示例：定义接收子路径
@app.route('/<path:subpath>', methods=['GET'])
def get_sub_path(subpath):
    return f'<h1>{subpath}</h1>'

@app.route('/student/insert', methods=['POST'])
def student_insert():
    input = request.json
    print(f"获取到的用户信息是: {input}")
    return '这是一个学生信息<<插入>>路由接口'

@app.route('/student/update', methods=['GET'])
def student_update():
    return '这是一个学生信息<<修改>>路由接口'


@app.route('/student/query', methods=['GET'])
def student_query():
    name = request.args['name']
    id = request.args['id']
    gender = request.args['gender']
    print(f"学生的信息为: 姓名-> {name}, id -> {id}, gender -> {gender}")
    return '这是一个学生信息<<查询>>路由接口'


@app.route('/student/delete', methods=['GET'])
def student_delete():
    return '这是一个学生信息<<删除>>路由接口'


if __name__ == '__main__':
    app.add_url_rule('/my_url', 'my_url', my_url) # 这边不要忘记
    app.run(host='0.0.0.0', port=8091)
